package main

import (
	"bytes"
	"fmt"
	"log"

	"github.com/webview/webview"
	"golang.org/x/net/html"
)

// 构造 HTML 页面
func buildHTML() (string, error) {
	// 创建 HTML 文档的根节点
	doc := &html.Node{
		Type: html.DocumentNode,
	}

	// 创建 HTML 元素
	htmlNode := &html.Node{
		Type: html.ElementNode,
		Data: "html",
	}
	doc.AppendChild(htmlNode)

	// 创建 HEAD 元素
	headNode := &html.Node{
		Type: html.ElementNode,
		Data: "head",
	}
	htmlNode.AppendChild(headNode)

	// 创建 TITLE 元素
	titleNode := &html.Node{
		Type: html.ElementNode,
		Data: "title",
	}
	headNode.AppendChild(titleNode)

	// 创建 TITLE 文本节点
	titleText := &html.Node{
		Type: html.TextNode,
		Data: "My First HTML Page",
	}
	titleNode.AppendChild(titleText)

	// 创建 BODY 元素
	bodyNode := &html.Node{
		Type: html.ElementNode,
		Data: "body",
	}
	htmlNode.AppendChild(bodyNode)

	// 创建 H1 元素
	h1Node := &html.Node{
		Type: html.ElementNode,
		Data: "h1",
	}
	bodyNode.AppendChild(h1Node)

	// 创建 H1 文本节点
	h1Text := &html.Node{
		Type: html.TextNode,
		Data: "Welcome to my page!",
	}
	h1Node.AppendChild(h1Text)

	// 创建 P 元素
	pNode := &html.Node{
		Type: html.ElementNode,
		Data: "p",
	}
	bodyNode.AppendChild(pNode)

	// 创建 P 文本节点
	pText := &html.Node{
		Type: html.TextNode,
		Data: "This is a paragraph in my HTML page.",
	}
	pNode.AppendChild(pText)

	// 将节点树渲染为字节切片
	var buf bytes.Buffer
	err := html.Render(&buf, doc)
	if err != nil {
		return "", fmt.Errorf("error rendering HTML: %w", err)
	}

	return buf.String(), nil
}

func main() {
	// 构造 HTML 页面
	htmlStr, err := buildHTML()
	if err != nil {
		log.Fatalf("Failed to build HTML: %v", err)
	}

	// 创建 WebView 实例
	w := webview.New(true)
	defer w.Destroy()

	// 设置窗口标题和大小
	w.SetTitle("WebView Example")
	w.SetSize(800, 600, webview.HintNone)

	// 加载 HTML 内容
	w.Navigate("data:text/html," + htmlStr)

	// 运行 WebView 事件循环
	w.Run()
}
